Suivi et optimisation des coûts de stockage BigQuery
Contexte
Le but de ce document est de fournir une procédure permettant d'analyser et d'identifier les datasets et tables les plus coûteuses au niveau du stockage sur BigQuery.
Comme vu sur les rapports, on peut observer une très grosse augmentation du coût mensuel lié à BigQuery sur l'appli Oversight Dev depuis le début de l'année 2025. En filtrant les données de ces rapports, on s'aperçoit très clairement que la quasi-totalité des coûts engendrés est liée au stockage à long terme des données dans BigQuery.
Prérequis : Permissions IAM
Des requêtes SQL sont à utiliser pour identifier plus facilement les datasets et tables les plus volumineuses en regardant dans les métadonnées de ces dernières (INFORMATION_SCHEMA). Cependant, le rôle Propriétaire n'est pas suffisant pour l'exécution de ces requêtes et d'autres permissions sont nécessaires :
- Administrateur BigQuery
- Éditeur de données BigQuery
- Lecteur de données BigQuery
- Lecteur de métadonnées BigQuery
Étape 1 : Identifier les datasets les plus volumineux
La première étape consiste à obtenir une vue d'ensemble de tous les datasets du projet pour identifier celui ou ceux qui consomment le plus d'espace de stockage.
Procédure
Dans l'éditeur SQL de BigQuery, coller la requête suivante en veillant à utiliser la bonne région :
SELECT table_schema AS dataset,
ROUND(SUM(active_logical_bytes) / POW(1024, 3), 2) AS go_logiques_actifs,
ROUND(SUM(long_term_logical_bytes) / POW(1024, 3), 2) AS go_logiques_long_terme,
ROUND(SUM(total_logical_bytes) / POW(1024, 3), 2) AS go_logiques_total
FROM `region-europe-west1`.INFORMATION_SCHEMA.TABLE_STORAGE
GROUP BY dataset
ORDER BY go_logiques_total DESC;
Résultats
Cette requête va alors retourner un tableau contenant tous les datasets triés par ordre décroissant de taille :
| dataset | go_logiques_actifs | go_logiques_long_terme | go_logiques_total |
|---|---|---|---|
| PlanInsight | 9.25 | 6439.12 | 6448.37 |
| Accounting | 0.12 | 39.34 | 39.46 |
| Reservation | 0.01 | 11.89 | 11.91 |
| E_Reputation | 1.14 | 0.26 | 1.41 |
| Settings | 0.01 | 1.37 | 1.38 |
| Logfire | 1.29 | 0.0 | 1.29 |
| Airtable | 0.06 | 0.06 | 0.11 |
| HotelsPrices | 0.0 | 0.1 | 0.1 |
| Parcours_clients | 0.0 | 0.08 | 0.08 |
| ProductServiceOrder | 0.02 | 0.0 | 0.02 |
| Planning | 0.0 | 0.01 | 0.01 |
| CompsetData | 0.0 | 0.0 | 0.0 |
| MarketData | 0.0 | 0.0 | 0.0 |
| Elium | 0.0 | 0.0 | 0.0 |
| ProjectManagement | 0.0 | 0.0 | 0.0 |
| Agent | 0.0 | 0.0 | 0.0 |
| Opera_dev | 0.0 | 0.0 | 0.0 |
| Total | 11.90 Go | 6492.23 Go | 6504.13 Go |
Résultat obtenu le 01/10/2025
Ce tableau nous montre donc que le dataset PlanInsight est clairement la source principale à l'origine des surcoûts de stockage, avec plus de 6,5 To de données stockées à long terme.
Étape 2 : Identifier les tables les plus volumineuses du dataset
Maintenant que le dataset coupable est identifié, il faut "zoomer" à l'intérieur pour trouver les tables spécifiques qui occupent tout cet espace.
Procédure
Dans l'éditeur SQL de BigQuery, coller la requête suivante en veillant à utiliser la bonne région et en indiquant le dataset ciblé :
SELECT table_name AS nom_de_la_table,
ROUND(active_logical_bytes / POW(1024, 3), 2) AS go_logiques_actifs,
ROUND(long_term_logical_bytes / POW(1024, 3), 2) AS go_logiques_long_terme,
ROUND(total_logical_bytes / POW(1024, 3), 2) AS go_logiques_total
FROM `region-europe-west1`.INFORMATION_SCHEMA.TABLE_STORAGE
WHERE table_schema = 'PlanInsight'
ORDER BY go_logiques_total DESC;
Résultats
Cette requête va retourner un tableau qui contient toutes les tables du dataset ciblé, triées par ordre décroissant de taille :
| nom_de_la_table | go_logiques_actifs | go_logiques_long_terme | go_logiques_total |
|---|---|---|---|
| IncomeStatement_InvoiceValues... | 0.0 | 3997.81 | 3997.81 |
| ProvisionalPlanVersion_EnvelopeValues... | 0.0 | 769.14 | 769.14 |
| ProvisionalPlanVersion_PlanLineValues... | 0.0 | 563.05 | 563.05 |
| UpdatedPlan_EnvelopeValues... | 0.0 | 308.96 | 308.96 |
| UpdatedPlan_PlanLineValues... | 0.0 | 204.78 | 204.78 |
| CashPlan_BudgetItemValues... | 0.0 | 182.8 | 182.8 |
| IncomeStatement_BudgetItemValues... | 0.0 | 180.01 | 180.01 |
| ProvisionalPlanVersion_CalculationBasisValues... | 0.0 | 73.01 | 73.01 |
| CashPlan_PlanLineValues... | 0.0 | 72.41 | 72.41 |
| IncomeStatement_PlanLineValues... | 0.0 | 71.35 | 71.35 |
| InvoiceAndPaymentValues... | 0.0 | 15.26 | 15.26 |
| Transaction... | 7.36 | 0.0 | 7.36 |
| Invoice... | 1.62 | 0.0 | 1.62 |
| LinkTagStats... | 0.0 | 0.37 | 0.37 |
| Link... | 0.17 | 0.0 | 0.17 |
| ProvisionalPlanVersion_EnvelopeValues... | 0.0 | 0.06 | 0.06 |
| ProvisionalPlanVersion_PlanLineValues... | 0.0 | 0.04 | 0.04 |
| Envelope... | 0.03 | 0.0 | 0.03 |
| PlanLine_ProvisionalPlanVersion... | 0.02 | 0.0 | 0.02 |
| IncomeStatement_InvoiceValues_historical... | 0.0 | 0.02 | 0.02 |
| OriginalTransaction... | 0.02 | 0.0 | 0.02 |
| BudgetItem... | 0.01 | 0.0 | 0.01 |
| Contract... | 0.01 | 0.0 | 0.01 |
| UpdatedPlan_PlanLineValues_historical... | 0.0 | 0.01 | 0.01 |
| CashPlan_BudgetItemValues_historical... | 0.0 | 0.01 | 0.01 |
| UpdatedPlan_EnvelopeValues_historical... | 0.0 | 0.01 | 0.01 |
| CalculationBasis_ProvisionalPlanVersion... | 0.01 | 0.0 | 0.01 |
| ConsolidatedPlanValuesKorner... | 0.0 | 0.01 | 0.01 |
| ProvisionalPlanVersion_CalculationBasisValues... | 0.0 | 0.01 | 0.01 |
| IncomeStatement_BudgetItemValues_historical... | 0.0 | 0.01 | 0.01 |
| CashPlan_PlanLineValues_historical... | 0.0 | 0.0 | 0.0 |
| CalculationBasis... | 0.0 | 0.0 | 0.0 |
| IncomeStatement_PlanLineValues_historical... | 0.0 | 0.0 | 0.0 |
| ProvisionalPlanVersion... | 0.0 | 0.0 | 0.0 |
| ThirdParty... | 0.0 | 0.0 | 0.0 |
| PlanLine... | 0.0 | 0.0 | 0.0 |
| Hotel... | 0.0 | 0.0 | 0.0 |
| ProvisionalPlan... | 0.0 | 0.0 | 0.0 |
| Verification... | 0.0 | 0.0 | 0.0 |
| Manual_transactions | 0.0 | 0.0 | 0.0 |
| Users... | 0.0 | 0.0 | 0.0 |
| Total | 9.25 Go | 6439.12 Go | 6448.37 Go |
Résultat obtenu le 01/10/2025
Ce tableau nous montre donc que les tables les plus volumineuses du dataset PlanInsight sont les 7 premières qui représentent à elles seules environ 6.2To sur les 6.5To présents.